package com.mingke.chat.message.request;

import com.mingke.chat.message.logic.EasyChatC2CRequestLogic;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.nio.channels.AsynchronousSocketChannel;

/**
 * @author mingke
 * @function 单聊请求
 * @date 2021/12/18
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class EasyChatC2CRequest extends EasyChatRequest {
    /** 消息的发送者*/
    private Integer fromNumber;
    /** 消息的接受者*/
    private Integer toNumber;
    /** 消息的内容*/
    private String content;

    @Override
    public String toString() {
        return "EasyChatC2CRequest{" +
                "fromNumber='" + fromNumber + '\'' +
                ", toNumber='" + toNumber + '\'' +
                ", content='" + content + '\'' +
                ", 消息时间戳: "+getMsgDateTime()+'}';
    }

    /**
     * 每个消息都必须要去实现的处理消息方法
     * 私聊消息的方案是，根据消息的tonumber决定消息的去向
     * 1. 根据tonumber查找出消息的接受者是否在线
     * 2. 如果在线，则使用channel完成消息推送
     * 3. 如果不在线，在将消息推送到消息队列
     * 4. 用户上线后拉取对应自身number的消息
     * 5. 标记消息状态为已经发送的状态
     */
    @Override
    public void handlerMessage(AsynchronousSocketChannel socketChannel) {
        EasyChatC2CRequestLogic logic = new EasyChatC2CRequestLogic();
        logic.doLogic(this);
    }
}
